home *** CD-ROM | disk | FTP | other *** search
- #include <graphics.h>
-
- #ifndef shape_H
- #define shape_H
-
- #ifndef COP_H
- #include "cop.h"
- #endif
-
-
- struct_vFt_forward(Shape);
-
- struct_(Shape) {
- /* private: */
- unsigned x, y;
- polymorphic();
- vFT_decl(Shape);
- };
-
- struct_vFt(Shape) {
- vF_decl(void,show,
- (Shape * thiS, int xxpose,
- int yxpose, unsigned scale));
- vF_decl(void,destruct,(Shape * thiS,
- unsigned nobj, int malloced));
- };
-
- vFt_decl(Shape,Shape);
-
- vf_decl(void,SH,SH,show,(Shape * thiS, int xxpose,
- int yxpose, unsigned scale));
- vf_decl(void,SH,SH,destruct,(Shape * thiS,
- unsigned nobj, int malloced));
-
-
- struct_initVFTs_decl(SH,(Shape * thiS,
- void * descendanT_0, vFT_0_decl(Shape)));
-
- #define SH_malloc(nobj) MALLOC(sizeof(Shape)*nobj)
- #define SH_free(thiS) FREE(thiS)
-
-
- struct_init_decl(Shape,SH,_,
- (Shape * thiS_0, unsigned nobj,
- unsigned x, unsigned y));
-
- struct_destruct_decl(Shape,SH);
-
-
- #define SH_init(thiS_0,nobj,x,y) \
- struct_init(SH,_,(thiS_0,nobj,x,y))
- #define SH_init_default(thiS_0) \
- SH_init(thiS_0,1,0,0)
- #define SH_new(nobj,x,y) \
- SH_init((Shape *)0,nobj,x,y)
- #define SH_new_default() \
- SH_init_default((Shape *)0)
- #define SH_destruct(thiS,nobj) \
- vf_runTimeBind(thiS,destruct,(thiS,nobj,0))
- #define SH_delete(thiS_0,nobj) \
- if (thiS_0) vf_runTimeBind(thiS_0, \
- destruct,(thiS_0,nobj,1)); else
-
- #define SH_getx(thiS) (1?(thiS)->x:0)
- #define SH_gety(thiS) (1?(thiS)->y:0)
-
- #define SH_show(thiS,xxpose,yxpose,scale) \
- vf_runTimeBind(thiS,show, \
- (thiS,xxpose,yxpose,scale))
- #define SH_show_default(thiS) SH_show(thiS,0,0,1)
-
-
- struct_(Segment) {
- /* private: */
- Shape ** shapes;
- unsigned shapeCount;
- polymorphic();
- /* public: */
- inherit(Shape);
- };
-
- #define SG_ShapeThiS(thiS) baseThiS(thiS,Shape)
- polyBaseThiS_0_decl(SG,Shape,Segment);
- #define SH_SegmentThiS(thiS) derivedThiS(thiS,Segment)
-
- vFt_decl(Segment,Shape);
-
- vf_decl(void,SG,SH,show,(Shape * thiS, int xxpose,
- int yxpose, unsigned scale));
- vf_decl(void,SG,SH,destruct,(Shape * thiS,
- unsigned nobj, int malloced));
-
- struct_initVFTs_decl(SG,(Segment * thiS,
- void * descendanT_0, vFT_0_decl(Shape)));
-
- #define SG_malloc(nobj) MALLOC(sizeof(Segment)*nobj)
- #define SG_free(thiS) FREE(thiS)
-
- struct_init_decl(Segment,SG,_,
- (Segment * thiS_0, unsigned nobj,
- unsigned x, unsigned y,
- unsigned shapeCount, ...));
-
- struct_destruct_decl(Segment,SG);
-
- #define SG_init(actualParams) \
- struct_init(SG,_,actualParams)
- /* actualParams: (thiS_0,1,x,y,shapeCount,...) */
- #define SG_destruct(thiS) \
- SH_destruct(SG_ShapeThiS(thiS),1)
- #define SG_delete(thiS_0) \
- SH_delete(SG_ShapeThiS(thiS_0),1)
-
- #define SG_getx(thiS) SH_getx(SG_ShapeThiS(thiS))
- #define SG_gety(thiS) SH_gety(SG_ShapeThiS(thiS))
- #define SG_show(thiS,xxpose,yxpose,scale) \
- SH_show(SG_ShapeThiS(thiS),xxpose,yxpose,scale)
- #define SG_show_default(thiS) SG_show(thiS,0,0,1)
-
-
- struct_(Circle) {
- /* private: */
- polymorphic();
- /* protected: */
- unsigned radius;
- /* public: */
- inherit(Shape);
- };
-
- #define CR_ShapeThiS(thiS) baseThiS(thiS,Shape)
- polyBaseThiS_0_decl(CR,Shape,Circle);
- #define SH_CircleThiS(thiS) derivedThiS(thiS,Circle)
-
- vFt_decl(Circle,Shape);
-
- vf_decl(void,CR,SH,show,(Shape * thiS, int xxpose,
- int yxpose, unsigned scale));
- vf_decl(void,CR,SH,destruct,(Shape * thiS,
- unsigned nobj, int malloced));
-
- struct_initVFTs_decl(CR,(Circle * thiS,
- void * descendanT_0, vFT_0_decl(Shape)));
-
- #define CR_malloc(nobj) MALLOC(sizeof(Circle)*nobj)
- #define CR_free(thiS) FREE(thiS)
-
- struct_init_decl(Circle,CR,_,
- (Circle * thiS_0, unsigned nobj,
- unsigned radius,
- unsigned x, unsigned y));
-
- struct_destruct_decl(Circle,CR);
-
- #define CR_init(thiS_0,nobj,radius,x,y) \
- struct_init(CR,_,(thiS_0, \
- nobj,radius,x,y))
- #define CR_init_default(thiS_0) \
- CR_init(thiS_0,1,(unsigned)getmaxy()/8,0,0)
- #define CR_new(nobj,radius,x,y) \
- CR_init((Circle *)0,nobj,radius,x,y)
- #define CR_new_default() \
- CR_init_default((Circle *)0)
- #define CR_destruct(thiS,nobj) \
- SH_destruct(CR_ShapeThiS(thiS),nobj)
- #define CR_delete(thiS_0,nobj) \
- SH_delete(CR_ShapeThiS(thiS_0),nobj)
-
- #define CR_getx(thiS) SH_getx(SG_ShapeThiS(thiS))
- #define CR_gety(thiS) SH_gety(SG_ShapeThiS(thiS))
- #define CR_show(thiS,xxpose,yxpose,scale) \
- SH_show(CR_ShapeThiS(thiS),xxpose,yxpose,scale)
- #define CR_show_default(thiS) CR_show(thiS,0,0,1)
-
-
- #endif
-